日志满造成的故障

数据库在运行中,有一个大事务,比如删除一个表(drop table),把数据库的日志撑满了,数据库报错,不再运行。这是一个经常出现的问题,如果操作不当,比如停机(shutdown)那就挺危险的.

处理这类故障,最直接最安全的办法是增加"日志空间":

alter datbase your_db_name log on your_db_dev=xxxM

如果重启了,服务器就会报错,这个库就因为没有recovery而不可用,这时就需要修改系统表,把这个库的状态改为-32768,然后清除日志。步骤如下:

1)sp_configure "allow updates",1

2)update master.sysdatabases set status = -32768 where name = "your_db_name"重启服务;

3)dump tran you_database_name with no_log

4)update master.sysdatabases set status = 0 where name ="your_db_name"

再重启服务,一般情况,ASE系统就可以使用了.

另外有几个注意事项:

1)如果日志中数据量很大,启动的时间可能很长,几十分钟,甚至更长;

2)日志满的是master数据库,那么需要打flag -T3607来代替直接改sysdatbases表;

3)如果用上述办法还不能修复,那就要从操作系统层面删除数据日志,这就有风险,必要是要通过bcp备份重要的表。